/*
*
*/
package org.eftp.ftpserver.business.hooks.boundary;
import java.net.URI;
import java.util.List;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObject;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.eftp.events.FtpEventName;
import org.eftp.ftpserver.business.hooks.entity.Hook;
/**
*
* @author adam-bien.com
*/
@Stateless
@Path("hooks")
public class HooksResource {
@Inject
HooksRegistry hr;
@POST
public Response register(JsonObject callback, @Context UriInfo info) {
long id = hr.saveOrUpdate(convert(callback));
final URI creationUri = info.getRequestUriBuilder().path(String.valueOf(id)).build();
return Response.created(creationUri).build();
}
@GET
@Path("{id}")
public JsonObject find(@PathParam("id") long id) {
Hook hook = hr.find(id);
return convert(hook);
}
@GET
public JsonArray all() {
JsonArrayBuilder builder = Json.createArrayBuilder();
List<Hook> allHooks = hr.all();
for (Hook hook : allHooks) {
builder.add(convert(hook));
}
return builder.build();
}
@DELETE
@Path("{id}")
public void delete(@PathParam("id") long id) {
hr.remove(id);
}
Hook convert(JsonObject object) {
String command = object.getString("command", FtpEventName.EVERYTHING.toString());
String uri = object.getString("uri");
return new Hook(uri, FtpEventName.valueOf(command.toUpperCase()));
}
JsonObject convert(Hook hook) {
if (hook == null) {
return null;
}
return Json.createObjectBuilder().
add("command", hook.getCommand().toString()).
add("uri", hook.getUri()).
add("id", hook.getId()).
build();
}
}